#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

/*
指针数组：元素类型是指针的数组

数组指针：指向数组的指针


数组指针数组==》指针数组==》数组
元素是指针，指针是指向数组的指针
*/

/*
一 指针数组
就是一个数组，访问到元素之后，按照元素类型使用即可

二、数组指针
就是一个指针
类型             变量名
指针本身的类型    指针名   元素类型 (*) [元素个数]
指针指向的类型*   指针名   元素类型 () [元素个数]

指针指向的类型：数组类型         元素类型 () [元素个数]
指针本身的类型：                元素类型 (*) [元素个数]
数组类型：元素类型 [元素个数]

元素类型 (*指针名) [元素个数]

typedef 元素类型 （数组类型别名）[元素个数]
typedef 元素类型 （*指针类型别名‘）[元素个数]

*/

typedef int (*pARR) [3];
typedef int ARR [3];

int main()
{

    int* arr_1[3];
    arr_1[0]=NULL;

    int num=9;
    arr_1[1]=&num;

    arr_1[2]=arr_1[1];
    printf("num=%0X\t%d\n",&num,num);
    printf("arr_1[0]=%0X\t%d\n",arr_1[0],arr_1[0]);
    printf("arr_1[1]=%0X\t%d\n",arr_1[1],*arr_1[1]);
    printf("arr_1[2]=%0X\t%d\n",arr_1[2],*arr_1[2]);

    int a,b,c;
    a=b=c=0;
    int* arr_2[3]={&a,&b};
    arr_2[2]=&c;
    printf("%d,%d,%d\n",*arr_2[0],*arr_2[1],*arr_2[2]);
    *arr_2[0]=666;
    arr_2[2]=&a;
    printf("%d,%d,%d\n",*arr_2[0],*arr_2[1],*arr_2[2]);

	int arr[3]={1,2,3};
    int (*pArr_0)[3]=&arr;

    // p[0]<===>*(p+n)
    printf("%d\n",arr[0]);
    printf("%d\n",(*pArr_0)[0]);
    printf("%d\n",pArr_0[0][0]);
    printf("%d\n",(*pArr_0)[0]);
    printf("%d\n",(*(*pArr_0)));
    printf("%d\n",**pArr_0);

    ARR arr_3={3,4,5};
    pARR pArr_1=&arr_3;
    ARR* pArr_1_1 =&arr_3;



	//system("pause");
	return 0;
} 